#!/usr/bin/env bash
#-----------------------------------------------
# Author : hpy
# Emal   : yuan_hp@qq.com
#
# auto run some file! for example bash,fish,tcl,
# python, cpp, gnuplot and so on
#-----------------------------------------------
dst=$(date +%Y%m%d%H%M%S.mgo) #临时文件

function main(){
    DefautRun $*
    test ! -f $1 && echo "不存在 $1 文件" | cat && exit
        cd $(dirname $1)
        file_name=$(basename $1)
    ReadFileType $file_name | cat  #cat显示是为了在win上不乱码
}

#带有参数，则识别第一个参数，并根据文件不同类型选择后续操作
function ReadFileType(){
    case $1 in
        *.sh | *.fish | *.pl | *.tcl | *.tk | *.py | *.lua | *.awk)  chmod +x $1 && ./$1 ;;
                *.c) gcc -o $dst $1 && chmod +x $dst && ./$dst|cat;;
                *.cpp)g++ -std=c++11 -o $dst $1 && chmod +x $dst && ./$dst;;
        *.go ) go build -o $dst $1 && chmod +x $dst &&  ./$dst ;;
        *.plt) gnuplot $1 ;;   #gnuplot
                *.m) dst=$(basename $1) && dst=${dst%%.*}&& matlab -nosplash -nodesktop -r $dst ;;  #matlab文件
        * ) echo "Fuck! I don't konw what it is!" ;;
    esac

    test -f $dst && rm $dst &>/dev/null
}

#当不带参数输入时 找run或者run.sh,run.fish文件运行,还是没有则寻找当前路径下最近1分钟发修改的文件，然后再次寻找
function DefautRun(){
    if [ -z $* ] ;then
        if [ -f run ] ;then
                        echo "真实执行路径:$(pwd)"
            chmod +x run
            ./run
        elif [ -f run.sh ] ; then
                        echo "真实执行路径:$(pwd)"
            chmod +x run.sh
            ./run.sh
                elif [ -f run.fish ] ; then
                        echo "真实执行路径:$(pwd)"
                        chmod +x run.fish
                        ./run.fish
        else
            #当前路径下没有这些文件，那么搜索当前终端下最近一分钟修改的文件
                        src=$(find . -type f -mmin 1 | xargs ls -ta |head -n +1)
                        if [ ${#src} -gt 0 ] ; then
                                fid=$(readlink -f $src)
                                pdir=$(dirname $src)
                                fid=$(basename $src)
                                cd $pdir
                                if [ -f run ] ; then
                                        echo "真实执行路径:$(pwd)"
                                        chmod +x run
                                        ./run
                                        exit 0
                                elif [ -f run.sh ] ; then
                                        echo "真实执行路径:$(pwd)"
                                        chmod +x run.sh
                                        ./run.sh
                                        exit 0
                                elif [ -f run.fish ] ; then
                                        echo "真实执行路径:$(pwd)"
                                        chmod +x run.fish
                                        ./run.fish
                                        exit 0
                                else
                                        echo "尝试执行文件:$src"
                                        ReadFileType $fid
                                        exit 0
                                fi

                        fi
            echo "Fuck! Fuck! No parameters, no run file or run.sh file, what do you want?"
        fi
        exit 0
    fi
}

main $*